package br.com.imob.dao;

import br.com.imob.modelo.Contrato;

import java.util.List;

/** @user Gilton Nascimento
 *  @since 18:12:39 17/02/2011 2011
 *  @version 
 */

public class ContratoDao extends GenericDao {
	
	public ContratoDao() {  }
	
	public Integer adicionarContrato(Contrato contrato) {
		saveOrUpdatePojo(contrato);
		return contrato.getContratoId();
	}
	
	public void removerContrato(Contrato contrato) {
		removerPojo(contrato);
	}

	/* Precisa definir o ID */
	public void atualizarContrato(Contrato recupera) {
		saveOrUpdatePojo(recupera);
	}
	
	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarContrato(Contrato recuperar, Contrato alterar) {
		recuperar = retriveContrato(recuperar);
		
		if(alterar.getCategoria() != null)
			recuperar.setCategoria(alterar.getCategoria());
		if(alterar.getQtdLicensa() != 0)
			recuperar.setQtdLicensa(alterar.getQtdLicensa());
		if(alterar.getQtdParcela() != 0)
			recuperar.setQtdParcela(alterar.getQtdParcela());
		if(alterar.getDataContrato() != null)
			recuperar.setDataContrato(alterar.getDataContrato() );
		if(alterar.getDataTermino() != null)
			recuperar.setDataTermino(alterar.getDataTermino() );
		if(alterar.getExpiracaoConta() != null)
			recuperar.setExpiracaoConta(alterar.getExpiracaoConta() );
		if(alterar.getLicensaVlr() != 0.0)
			recuperar.setLicensaVlr(alterar.getLicensaVlr() );
		
		if(alterar.getValorTotal() != 0.0)
			recuperar.setValorTotal(alterar.getValorTotal() );
		
		saveOrUpdatePojo(recuperar);
	}
	
	
	/**
	 * Editar um Contrato
	 * @param String oldContrato
	 * @param String newContrato
	 */
	public void atualizarContrato(String tpStr, String oldContrato, String newContrato ) {
		
		if( "categoria".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldContrato) && oldContrato != null )
					&& ( !"".equalsIgnoreCase(newContrato) && newContrato != null ) ) 
				atualizarContrato( getContratoQNamedCategoria(oldContrato), new Contrato(tpStr, newContrato) );
		}
		
	}
	
//	Artificio para Recuperar a Tupla de Contrato
	protected Contrato retriveContrato(Contrato recuperar) {
		if(recuperar.getContratoId() == null)
			return getContratoQNamedCategoria(recuperar.getCategoria());
		else 
			return getContrato(recuperar.getContratoId());
	}
	
	
//	Consultas
	public Contrato getContrato(Integer key) {
		return getPojoByID(Contrato.class, key);
	}
	public Contrato getContratoByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public Contrato getContratoQNamedCategoria(String fltrCategoria) {
		return getPojoByQNamed("Contrato.findByCategoria", fltrCategoria);
	}
	
//	Listas
	public List<Contrato> getContratos() {
		return (List<Contrato>) getALL(Contrato.class);
	}
	
	public List<Contrato> getContratosQNamedCategoriaPRX(String fltrCategoria) {
		return getListByQNamedPRX("Contrato.findLikeByCategoria", fltrCategoria);
	}
	
	public List<Contrato> getContratosQNamedQtdLicensas(int fltrQtdLicensas) {
		return getListByQNamed("Contrato.findByQtdLicensa", fltrQtdLicensas);
	}
	public List<Contrato> getContratosQNamedQtdParcelas(int fltrQtdParcelas) {
		return getListByQNamed("Contrato.findByQtdLicensa", fltrQtdParcelas);
	}
	public List<Contrato> getContratosQNamedDtContrato(String fltrDtContrato) {
		return getListByQNamed("Contrato.findByDataContrato", fltrDtContrato);
	}
	public List<Contrato> getContratosQNamedDtTermino(String fltrDtTermino) {
		return getListByQNamed("Contrato.findByDataTermino", fltrDtTermino);
	}
	public List<Contrato> getContratosQNamedExpiracaoConta(String fltrExpirado) {
		return getListByQNamed("Contrato.findByExpiracaoConta", fltrExpirado);
	}
	public List<Contrato> getContratosQNamedLicensaVlr(String fltrLicensaVlr) {
		return getListByQNamed("Contrato.findByLicensaVlr", fltrLicensaVlr);
	}
	public List<Contrato> getContratosQNamedVlrTotal(String fltrVlrTotal) {
		return getListByQNamed("Contrato.findByVlrTotal", fltrVlrTotal);
	}
	public List<Contrato> getContratosByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}
	
}